<?php
/**
 * Html-Scanner zur Ausgabe und Weiterverarbeitug von Informationen im Html Geruest
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * @TODO
 * */


Class Yapary_WWW_Html_Scanner
{
    private $content = '';
    private $oTag    = NULL;

    /**
	 * @param string $content    : Content, in welchem das Vorkommen von "tag" gesucht werden soll
     * */
    function __construct($_content) {
        $this->content = $_content;
        $this->oTag    = new Yapary_WWW_Html_Tag();
    }

	/**
	* Befreit den Content von Zeilenumbruechen, Tabs und Leerzeichen am Anfang und Ende der Tags
	* @return void
	*/
    public function cleanup () {
        // Zeilenumbrueche gegen Leerzeichen tauschen
        $pattern ="/([\t\r\n]+)/";
        $this->content = preg_replace($pattern, ' ', $this->content);

        // doppelte Leerzeichen gegen eins tauschen
        $this->content = str_replace('  ', ' ', $this->content);

        // Leerzeichen am Anfang und Ende eines Tags entfernen
        $pattern ="/(>\s*)/";
        $this->content = preg_replace($pattern, '>', $this->content);
        $pattern ="/(\s*<)/";
        $this->content = preg_replace($pattern, '<', $this->content);
    }

    /**
	 * gibt alle Vorkommen von "tag" aus
	 * @param string $tag        : Zu suchende Tag
	 * @return Yapary_WWW_Html_ElementList|NULL
	 * */
    public function getTag ($tag) {
        $arr = $this->oTag->getTagList($this->content, $tag);
        return new Yapary_WWW_Html_ElementList($arr);
    }

    /**
	 * gibt alle Vorkommen von "tag" mit der definierten Class aus
	 * @param string $param     : Zu ermittelnder Parameter {id|class|style|...}
	 * @param string $paramVal	: Zu ermittelnder Parameterwert
	 * @return Yapary_WWW_Html_ElementList
	 * */
    public function getTagByParam ($param, $paramVal) {
        $arr = $this->oTag->getTagListByParam($this->content, $param, $paramVal);
        return new Yapary_WWW_Html_ElementList($arr);
    }

    /**
	 * gibt alle Vorkommen von "tag" mit de $param=$paramVal aus
	 * @param string $tag       : Name des Tags
	 * @param string $param     : Zu ermittelnder Parameter {id|class|style|...}
	 * @param string $paramVal	: Zu ermittelnder Parameterwert
	 * @return Yapary_WWW_Html_ElementList
	 * */
    public function getTagByNameParam ($tag, $param, $paramVal) {
        $arr = $this->oTag->getTagListByNameParam($this->content, $tag, $param, $paramVal);
        return new Yapary_WWW_Html_ElementList($arr);
    }

    /**
	 * Entfernt das N-te Vorkommen von $tag
	 * @param string $tag        : Zu entfernender Tag
	 * @param int    $index		: index des zu entfernenden Elements
	 * @return Yapary_WWW_Html_Element
	 * */
    public function removeTag ($tag, $index = 0) {
        $content = $this->oTag->removeTag($this->content, $tag, $index);
        $arr = array(0,
                     0,
                     $content,
                     '',
                     $content,
                     '');

        return new Yapary_WWW_Html_Element($arr);
    }

    /**
	 * Entfernt alle Vorkommen von $tag
	 * @param string $tag        : Zu entfernender tag
	 * @return Yapary_WWW_Html_Element
	 * */
    public function removeTags ($tag) {
        $content = $this->oTag->removeTags($this->content, $tag);
        $arr = array(0,
                     0,
                     $content,
                     '',
                     $content,
                     '');

        return new Yapary_WWW_Html_Element($arr);
    }

    /**
	 * Entfernt das N-te Vorkommen von tag anhand des Parameters+Parameterwerts
	 * @param string $param     : Zu ermittelnder Parameter {id|class|style|...}
	 * @param string $paramVal	: Zu ermittelnder Parameterwert
	 * @param int    $index		: index des zu entfernenden Elements
	 * @return Yapary_WWW_Html_Element
	 * */
    public function removeTagByParam ($param, $paramVal, $index = 0) {
        $content = $this->oTag->removeTagByParam($this->content, $param, $paramVal, $index);
        $arr = array(0,
                     0,
                     $content,
                     '',
                     $content,
                     '');

        return new Yapary_WWW_Html_Element($arr);
    }

    /**
	 * Entfernt alle Vorkommen von tag anhand des Parameters+Parameterwerts
	 * @param string $param     : Zu ermittelnder Parameter {id|class|style|...}
	 * @param string $paramVal	: Zu ermittelnder Parameterwert
	 * @return Yapary_WWW_Html_Element
	 * */
    public function removeTagsByParam ($param, $paramVal) {
        $content = $this->oTag->removeTagsByParam($this->content, $param, $paramVal);
        $arr = array(0,
                     0,
                     $content,
                     '',
                     $content,
                     '');

        return new Yapary_WWW_Html_Element($arr);
    }


}

?>